; Music of Grand Prix Simulator (1987) (Codemasters) (John-Paul Eldrige)
; Ripped by Megachur the 03/11/2006

	write "GRANDPRS.BIN"

music_date_rip	equ &03b6
music_adr	equ &97c5
first_theme	equ 0
last_theme	equ 1	; 0 -> 1

	read "music_header_v1_0.asm"

;digit_play		equ &97c5	; a = 0,1,2,3

.l97c5
	sla a
	sla a
	ld c,a
	ld b,#00
	ld ix,#6a26
	add ix,bc
	ld e,(ix+#02)
	ld d,(ix+#03)
	ld l,(ix+#00)
	ld h,(ix+#01)
	ld bc,#0040
	add hl,bc
	jp l9823
.l97e5
	ld b,#ff
.l97e7
	djnz l97e7
	dec a
	jr nz,l97e5
	ret
	push bc
	push af
	ld a,#05
	call l97c5
	ld a,#28
	call l97e5
	pop af
	xor #01
	inc a
	call l97c5
	ld a,#28
	call l97e5
	pop bc
	ld a,b
	cp #00
	jr z,l981e
	push af
	ld a,#04
	call l97c5
	ld a,#28
	call l97e5
	pop af
	neg
	add #03
	jp l97c5
.l981e
	ld a,#06
	jp l97c5
.l9823
	push hl
	push de
	call l9885
	pop de
	pop hl
.l982a
	ld b,#08
.l982c
	rlc (hl)
	push bc
	call c,l984f
	call nc,l9859
	push hl
	ld h,#01
	call l9863
	pop hl
	pop bc
	djnz l982c
	inc hl
	dec de
	ld a,d
	or e
	jr nz,l982a
	call #bca7
	ei
	ld a,#07
	call #bcb3
	ret
.l984f
	push af
	ld a,#09
	ld c,#0a
	call l9869
	pop af
	ret
.l9859
	push af
	ld a,#09
	ld c,#00
	call l9869
	pop af
	ret
.l9863
	ld h,#01
.l9865
	dec h
	jr nz,l9865
	ret
.l9869
	push af
	ld a,#c0
	ld b,#f6
	out (c),a
	ld b,#f4
	pop af
	out (c),a
	ld b,#f6
	ld a,#80
	out (c),a
	ld b,#f4
	out (c),c
	ld b,#f6
	xor a
	out (c),a
	ret
.l9885
	call #bca7
	di
	ld a,#03
	ld c,#00
	call l9869
	ld a,#07
	ld c,#3d
	call l9869
	ld a,#02
	ld c,#00
	call l9869
	ret
	ld hl,l98b1
	call #bcaa
	ld hl,l98ba
	call #bcaa
	ld hl,l98c3
	jp #bcaa
.l98b1
	db #81,#04,#00,#77,#00,#00,#0f,#ff
	db #ff
.l98ba
	db #82,#04,#00,#ef,#00,#00,#0f,#ff
	db #ff
.l98c3
	db #84,#04,#00,#de,#01,#00,#0f,#ff
	db #ff
.l98cc		; another theme
	ld hl,l9af7
	ld (l9a4e),hl
	ld (l9a50),hl
	ld hl,l9b20
	ld (l9a5e),hl
	ld (l9a60),hl
	ld hl,l9b49
	ld (l9a6e),hl
	ld (l9a70),hl
	jp l9908
.l98ea
	ld hl,l9b5c	; main theme
	ld (l9a4e),hl
	ld (l9a50),hl
	ld hl,l9c33
	ld (l9a5e),hl
	ld (l9a60),hl
	ld hl,l9c4c
	ld (l9a6e),hl
	ld (l9a70),hl
	jp l9908
.l9908
	call #bca7
	xor a
	ld (l9a4d),a
	ld (l9a53),a
	ld (l9a5d),a
	ld (l9a63),a
	ld (l9a6d),a
	ld (l9a73),a
	add #02
	ld (l9a52),a
	ld (l9a62),a
	ld (l9a72),a
	ld hl,l9a74
	ld bc,#8100
	ld de,l993b
	jp #bcd7
;
.stop_music
.l9935
;
	ld hl,l9a74
	jp #bcdd
;
.play_music	
.l993b
;
	push af
	push iy
	ld a,(l9a52)
	sub #02
	ld (l9a52),a
	ld iy,l9a44
	call z,l996f
	ld a,(l9a62)
	sub #02
	ld (l9a62),a
	ld iy,l9a54
	call z,l996f
	ld a,(l9a72)
	sub #02
	ld (l9a72),a
	ld iy,l9a64
	call z,l996f
	pop iy
	pop af
	ret
.l996f
	push bc
	push de
	push hl
	push ix
.l9974
	ld l,(iy+#0c)
	ld h,(iy+#0d)
	push hl
	pop ix
.l997d
	ld a,(ix+#00)
	cp #ff
	jr z,l99f3
	cp #fe
	jr z,l9a02
	cp #fd
	jp z,l9a12
	cp #fc
	jr z,l9a0a
	cp #fb
	jr z,l99ea
	cp #7f
	jp nc,l9a1a
	ld a,(ix+#00)
	ld hl,l9a7d
	sla a
	ld b,#00
	ld c,a
	add hl,bc
	ld a,(hl)
	ld (iy+#03),a
	inc hl
	ld a,(hl)
	ld (iy+#04),a
	ld a,(ix+#01)
	ld (iy+#07),a
	ld (iy+#0e),a
	ld l,(iy+#0c)
	ld h,(iy+#0d)
	inc hl
	inc hl
	ld (iy+#0c),l
	ld (iy+#0d),h
	push iy
	pop hl
	call #bcaa
	pop ix
	pop hl
	pop de
	pop bc
	ret
	xor a
	ld (iy+#09),a
.l99d6
	ld l,(iy+#0c)
	ld h,(iy+#0d)
	inc hl
	inc hl
	inc ix
	inc ix
	ld (iy+#0c),l
	ld (iy+#0d),h
	jr l997d
.l99ea
	ld a,(ix+#01)
	ld (iy+#05),a
	jp l99d6
.l99f3
	ld a,(iy+#0a)
	ld (iy+#0c),a
	ld a,(iy+#0b)
	ld (iy+#0d),a
	jp l9974
.l9a02
	ld a,(ix+#01)
	ld (iy+#01),a
	jr l99d6
.l9a0a
	ld a,(ix+#01)
	ld (iy+#02),a
	jr l99d6
.l9a12
	ld a,(ix+#01)
	ld (iy+#06),a
	jr l99d6
.l9a1a
	ld b,a
	ld a,(iy+#09)
	cp #00
	jr nz,l9a25
	ld a,b
	sub #7f
.l9a25
	dec a
	ld (iy+#09),a
	cp #00
	jr z,l99d6
	ld a,(ix+#01)
	sla a
	ld b,#00
	ld c,a
	and a
	push ix
	pop hl
	sbc hl,bc
	ld (iy+#0c),l
	ld (iy+#0d),h
	jp l9974
.l9a44
	db #81,#00,#00,#00,#00,#00,#00,#00
.l9a53 equ $ + 7
.l9a52 equ $ + 6
.l9a50 equ $ + 4
.l9a4e equ $ + 2
.l9a4d equ $ + 1
	db #00,#00,#00,#00,#00,#00,#02,#00
.l9a54
	db #82,#00,#00,#00,#00,#00,#00,#00
.l9a63 equ $ + 7
.l9a62 equ $ + 6
.l9a60 equ $ + 4
.l9a5e equ $ + 2
.l9a5d equ $ + 1
	db #00,#00,#00,#00,#00,#00,#02,#00
.l9a64
	db #84,#00,#00,#00,#00,#00,#00,#00
.l9a73 equ $ + 7
.l9a72 equ $ + 6
.l9a70 equ $ + 4
.l9a6e equ $ + 2
.l9a6d equ $ + 1
	db #00,#00,#00,#00,#00,#00,#02,#00
.l9a74
	db #00,#00,#00,#00,#00,#00,#00,#00
	db #00
.l9a7d
	dw #03bc,#0386,#0353,#0324
	dw #02f6,#02cc,#02a4,#027e
	dw #025a,#0238,#0218,#01fa
	dw #01de,#01c3,#01aa,#0192
	dw #017b,#0166,#0152,#013f
	dw #012d,#011c,#010c,#00fd
	dw #00ef,#00e1,#00d5,#00c9
	dw #00be,#00b3,#00a9,#009f
	dw #0096,#008e,#0086,#007f
	dw #0077,#0071,#006a,#0064
	dw #005f,#0059,#0054,#0050
	dw #004b,#0047,#0043,#003f
	dw #003c,#0038,#0035,#0032
	dw #002f,#002d,#002a,#0028
	dw #0026,#0024,#0022,#0020
	db #00,#00
.l9af7
	db #fd,#0a,#fe,#05,#fc,#00,#fb,#00
	db #18,#10,#1d,#10,#24,#10,#1d,#10
	db #1a,#10,#1f,#10,#26,#10,#1f,#10
	db #1c,#10,#21,#10,#28,#10,#21,#10
	db #1d,#10,#23,#10,#29,#10,#23,#10
	db #ff
.l9b20
	db #fd,#0a,#fe,#05,#fc,#00,#fb,#00
	db #0c,#10,#11,#10,#18,#10,#11,#10
	db #0e,#10,#13,#10,#1a,#10,#13,#10
	db #10,#10,#15,#10,#1c,#10,#15,#10
	db #11,#10,#17,#10,#1d,#10,#17,#10
	db #ff
.l9b49
	db #fd,#0a,#fc,#00,#fb,#01,#fe,#03
	db #fd,#0f,#3c,#20,#fe,#02,#fd,#0a
	db #3c,#20,#ff
.l9b5c
	db #fd,#0f,#fe,#01,#fc,#00,#fb,#00
	db #02,#10,#0e,#20,#0e,#10,#02,#10
	db #0e,#20,#0e,#10,#02,#10,#0e,#20
	db #0e,#10,#02,#10,#0e,#10,#0e,#10
	db #0e,#10,#81,#0d,#fb,#01,#fe,#03
	db #3c,#10,#3c,#10,#fe,#01,#3c,#20
	db #fe,#03,#3c,#10,#3c,#10,#fe,#01
	db #3c,#10,#3c,#10,#fe,#03,#3c,#10
	db #3c,#10,#fe,#01,#3c,#20,#fe,#03
	db #3c,#10,#3c,#08,#3c,#08,#fe,#01
	db #3c,#10,#3c,#10,#81,#18,#fe,#01
	db #fb,#00,#02,#10,#0e,#20,#0e,#10
	db #02,#10,#0e,#20,#0e,#10,#02,#10
	db #0e,#20,#0e,#10,#02,#10,#0e,#10
	db #0e,#10,#0e,#10,#83,#0d,#fb,#01
	db #fe,#03,#3c,#10,#3c,#10,#fe,#01
	db #3c,#20,#fe,#03,#3c,#10,#3c,#10
	db #fe,#01,#3c,#10,#3c,#10,#fe,#03
	db #3c,#10,#3c,#10,#fe,#01,#3c,#20
	db #fe,#03,#3c,#10,#3c,#08,#3c,#08
	db #fe,#01,#3c,#10,#3c,#10,#83,#17
	db #fb,#01,#fe,#03,#3c,#20,#fe,#01
	db #3c,#20,#fe,#03,#3c,#10,#3c,#10
	db #fe,#01,#3c,#10,#3c,#10,#fe,#03
	db #3c,#20,#fe,#01,#3c,#20,#fe,#03
	db #3c,#10,#3c,#08,#3c,#08,#fe,#01
	db #3c,#10,#3c,#10,#8d,#15,#ff
.l9c33
	db #fd,#0a,#fe,#02,#fc,#00,#fb,#00
	db #0e,#10,#1a,#20,#1a,#10,#82,#03
	db #0e,#10,#1a,#10,#1a,#10,#1a,#10
	db #ff
.l9c4c
	db #fd,#00,#fe,#00,#fb,#00,#00,#80
	db #00,#80,#fd,#0a,#fe,#02,#fc,#00
	db #1a,#10,#1a,#10,#26,#10,#26,#10
	db #1a,#10,#1a,#10,#26,#20,#83,#07
	db #fd,#00,#fe,#00,#00,#80,#00,#80
	db #fd,#0a,#fe,#05,#26,#10,#26,#10
	db #24,#10,#21,#20,#21,#10,#24,#10
	db #26,#20,#26,#10,#29,#20,#2b,#40
	db #26,#10,#26,#10,#24,#10,#21,#20
	db #21,#10,#24,#10,#26,#20,#26,#10
	db #2b,#20,#29,#40,#81,#14,#21,#10
	db #21,#08,#21,#08,#24,#10,#21,#20
	db #21,#10,#24,#10,#21,#10,#1f,#08
	db #1f,#08,#1f,#08,#1f,#08,#23,#10
	db #1f,#20,#1f,#10,#23,#10,#1f,#10
	db #83,#11,#21,#10,#24,#10,#26,#10
	db #28,#08,#28,#08,#26,#10,#24,#10
	db #21,#20,#21,#10,#24,#10,#26,#10
	db #28,#10,#26,#10,#24,#10,#26,#20
	db #1f,#10,#23,#10,#24,#10,#26,#08
	db #26,#08,#24,#10,#23,#10,#1f,#20
	db #1f,#10,#23,#10,#24,#10,#26,#10
	db #24,#10,#23,#10,#24,#20,#23,#10
	db #26,#10,#28,#10,#29,#08,#29,#08
	db #28,#10,#26,#10,#23,#20,#23,#10
	db #26,#10,#28,#10,#29,#10,#28,#10
	db #26,#10,#28,#20,#24,#10,#28,#10
	db #29,#10,#2b,#08,#2b,#08,#29,#10
	db #28,#10,#24,#20,#23,#10,#26,#10
	db #28,#10,#29,#08,#29,#08,#28,#10
	db #26,#10,#23,#20,#21,#10,#24,#10
	db #26,#10,#28,#08,#28,#08,#26,#10
	db #24,#10,#21,#20,#1f,#10,#23,#10
	db #24,#10,#26,#08,#26,#08,#24,#10
	db #23,#10,#1f,#20,#1f,#10,#23,#10
	db #24,#10,#26,#10,#24,#10,#23,#10
	db #24,#10,#24,#10,#24,#10,#24,#10
	db #30,#10,#30,#10,#24,#10,#24,#10
	db #30,#20,#23,#10,#23,#10,#2f,#10
	db #2f,#10,#23,#10,#23,#10,#2f,#20
	db #24,#10,#24,#10,#30,#10,#30,#10
	db #24,#10,#24,#10,#30,#20,#83,#07
	db #26,#10,#2b,#10,#26,#10,#29,#10
	db #26,#10,#24,#10,#24,#10,#26,#10
	db #26,#10,#29,#10,#26,#10,#2b,#10
	db #26,#10,#24,#10,#24,#10,#26,#10
	db #1a,#10,#1f,#10,#1a,#10,#1d,#10
	db #1a,#10,#18,#10,#18,#10,#1a,#10
	db #1a,#10,#1d,#10,#1a,#10,#1f,#10
	db #1a,#10,#18,#10,#18,#10,#1a,#10
	db #0e,#10,#13,#10,#0e,#10,#11,#10
	db #0e,#10,#0c,#10,#0c,#10,#0e,#10
	db #0e,#10,#11,#10,#0e,#10,#13,#10
	db #0e,#10,#0c,#10,#0c,#10,#0e,#10
	db #81,#10,#0e,#10,#13,#10,#0e,#10
	db #11,#10,#0e,#10,#0c,#10,#0c,#10
	db #0e,#80,#fe,#00,#fd,#00,#00,#90
	db #ff

;#89fa
;
.init_env_ent
;
	ld a,#01
	ld hl,l8a5d
	call #bcbc
	ld a,#02
	ld hl,l8a61
	call #bcbc
	ld a,#03
	ld hl,l8a68
	call #bcbc
	ld a,#04
	ld hl,l8a6c
	call #bcbc
	ld a,#05
	ld hl,l8a70
	call #bcbc
	ld a,#0e
	ld hl,l8a77
	call #bcbc
	ld a,#0f
	ld hl,l8a7b
	call #bcbc
	ld a,#01
	ld hl,l8a82
	call #bcbf
	ld a,#02
	ld hl,l8a89
	jp #bcbf
	db #81,#00,#00,#08,#07,#00,#00,#90
	db #01,#81,#00,#00,#00,#00,#0f,#07
	db #10,#00,#82,#0f,#02,#54,#00,#00
.l8a61 equ $ + 7
.l8a5d equ $ + 3
	db #0f,#fe,#ff,#01,#0f,#ff,#03,#02
.l8a68 equ $ + 6
	db #05,#01,#01,#0f,#ff,#01,#01,#0f
.l8a70 equ $ + 6
.l8a6c equ $ + 2
	db #ff,#01,#01,#0f,#ff,#08,#02,#04
.l8a77 equ $ + 5
	db #01,#01,#0e,#ff,#01,#01,#08,#ff
.l8a7b equ $ + 1
	db #02,#02,#03,#ff,#01,#03,#01,#01
.l8a89 equ $ + 7
.l8a82
	db #82,#04,#fc,#01,#04,#04,#01,#82
	db #01,#f0,#01,#01,#10,#01,#00,#06
	db #05
;
.init_music	; added by Megachur
;
	push af
	call init_env_ent
	pop af
	or a
	jp z,l98ea
	jp l98cc 

;
.game_name
	db "Grand Prix Simulator",0
.game_year
	db "1987",0
.game_publisher
	db "Codemasters",0
.music_author
	db "John-Paul Eldrige",0
.music_comment
	db "",0

	read "music_end_v1_0.asm"
